﻿using famails.bus;
using famails.dto;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace famails.BackEnd.Blog
{
    public partial class Article : System.Web.UI.Page
    {
        log4net.ILog logs = log4net.LogManager.GetLogger("ErrorRollingLogFileAppender");
        UserLoginDTO userLogin = null;
        string imagePath = "images/blogs";
        protected void Page_Load(object sender, EventArgs e)
        {
            userLogin = getUserLogin();
            if (!IsPostBack)
            {
                LoadCategory();
                LoadGroup();


                int id = 0; int.TryParse(Request.QueryString["aid"] + "", out id);
                if (id > 0)
                {
                    Load2Edit(id);
                }
            }
        }

        private void Load2Edit(int id)
        {
            ArticleBUS Bus = new ArticleBUS();
            DataTable item = Bus.Get2EditByID(id);
            if (item != null && item.Rows.Count > 0)
            {
                txtTitle.Text = item.Rows[0]["Title"] + "";
                txtSummary.Text = item.Rows[0]["Summary"] + "";
                txtBody.Text = item.Rows[0]["Content"] + "";
                ddlGroup.SelectedValue = item.Rows[0]["GroupID"] + "";
                cbShow.Checked = Convert.ToBoolean(item.Rows[0]["IsShow"]);
                image.ImageUrl = "../../" + item.Rows[0]["Image"];
                hdfImage.Value = item.Rows[0]["Image"] + "";
            }
        }

        private UserLoginDTO getUserLogin()
        {
            if (Session["us-login"] != null)
            {
                return (UserLoginDTO)Session["us-login"];
            }
            else Response.Redirect("~");
            return null;
        }
        private void LoadCategory()
        {
            ddlCategory.DataTextField = "CategoryName";
            ddlCategory.DataValueField = "CategoryID";
            CategoryBUS cBus = new CategoryBUS();
            DataTable source = cBus.GetAll("", -1);

            DataRow row = source.NewRow();
            row["categoryid"] = -1;
            row["categoryname"] = "Tất cả";
            source.Rows.InsertAt(row, 0);
            ddlCategory.DataSource = source;
            ddlCategory.DataBind();
        }
        void LoadGroup()
        {
            ddlGroup.DataTextField = "GroupName";
            ddlGroup.DataValueField = "GroupID";
            GroupBUS gBus = new GroupBUS();

            int id = -1;
            int.TryParse(ddlCategory.SelectedValue + "", out id);

            DataTable source = gBus.GetAll("", -1, id);

            DataRow row = source.NewRow();
            row["groupid"] = -1;
            row["groupname"] = "Tất cả";
            source.Rows.InsertAt(row, 0);
            ddlGroup.DataSource = source;
            ddlGroup.DataBind();
        }
        protected void btnSaveContent_Click(object sender, EventArgs e)
        {
            try
            {
                pnError.Visible = false;
                pnSuccess.Visible = false;
                string message = checkInput();
                int status = 0;
                if (message == "")
                {
                    ArticleBUS Bus = new ArticleBUS();
                    ArticleDTO dto = new ArticleDTO();
                    dto.Title = txtTitle.Text;
                    dto.Summary = txtSummary.Text;
                    dto.Content = txtBody.Text;
                    dto.GroupID = Convert.ToInt32(ddlGroup.SelectedValue);
                    dto.IsShow = cbShow.Checked;

                    dto.Image = SaveFile();
                    int id = 0; int.TryParse(Request.QueryString["aid"] + "", out id);
                    if (Request.QueryString["aid"] + "" == "" && id <= 0)
                    {
                        Bus.Insert(dto);
                        status = 1;
                    }
                    else
                    {
                        dto.ArticleID = id;
                        Bus.Edit(dto);
                        status = 2;
                    }
                    pnSuccess.Visible = true;
                    if (status == 1)
                    {
                        lblSuccess.Text = "Bạn vừa thêm thành công bài viết !";
                    }
                    else
                        if (status == 2)
                        {
                            lblSuccess.Text = "Bạn vừa cập nhật thành công bài viết !";
                        }
                    Response.Redirect("articlelist.aspx", false);
                }
                else
                {

                    pnSuccess.Visible = false;
                    pnError.Visible = true;
                    lblError.Text = message;

                }

            }
            catch (Exception ex)
            {

                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = " Đã xảy ra lỗi trong quá trình thực hiện. Vui lòng thử lại !<br/>" + ex.Message;
                logs.Error(userLogin.Username + "-BlogCatetory - Update", ex);
            }
        }

        private string SaveFile()
        {
            string newFile = Guid.NewGuid() + ".jpg";
            if(!Directory.Exists(Server.MapPath("../../"+imagePath)))
                Directory.CreateDirectory(Server.MapPath("../../" + imagePath));
            newFile = Path.Combine(imagePath, newFile);
            string filePath = Server.MapPath("../../" + newFile);
            if (fuImage.HasFile)
            {
                fuImage.SaveAs(filePath);
                return newFile;
            }
            else return hdfImage.Value;
        }

        private string checkInput()
        {
            string message = "";
            if (txtTitle.Text == "")
                message = "Vui lòng nhập tiêu đề!";
            else if (txtSummary.Text == "")
                message = "Vui lòng nhập tóm tắt!";
            else if (txtBody.Text == "")
                message = "Vui lòng nhập nội dung!";
            else if (!fuImage.HasFile && hdfImage.Value == "")
                message = "Vui lòng chọn hình ảnh";
            else
            {
                int id = 0; int.TryParse(ddlGroup.SelectedValue + "", out id);
                if (id <= 0)
                    message = "Vui lòng chọn nhóm chuyên mục";
                else
                {
                    id = 0; int.TryParse(Request.QueryString["aid"] + "", out id);
                    ArticleBUS Bus = new ArticleBUS();
                    if (Bus.CheckExistsName(txtTitle.Text, id))
                    {
                        message = "Trùng tiêu đề!";
                    }
                }
            }
            return message;
        }

        protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadGroup();
        }
    }
}